package com.atguigu.d_genric_interface;

import java.util.Hashtable;
import java.util.Properties;

public class Demo {
    public static void main(String[] args) {
        //延用 :
        Zi<String> zi = new Zi<>();

        //不延用 :
        Son son = new Son();
        //Son<Object> son = new Son<>();报错
        son.show("任意类型对象"); //泛型的本质是Object类型

        //不延用 : 实现时把父接口的泛型写死了
        Zai zai = new Zai();
        zai.show(100); //写死了 写成什么就只能传入什么

        System.out.println("-------------------");
        //实际场景 : Map<K,V> -> Hashtable<K,V> -> Properties
        Hashtable<String, Integer> ht = new Hashtable<>(); //延用Map的泛型

        Properties properties = new Properties(); //没有延用 Hashtable的泛型
    }
}


interface Fu<T>{
    //此接口中就可以使用 T 类型
    public abstract void show(T t);
}

//泛型不延用
//情况2 : 理会父接口/父类 泛型 -> 类型明确 -> 明确成什么 父类泛型就变成什么
class Zai implements Fu<Integer>{

    @Override
    public void show(Integer integer) {

    }
}

//情况1 : 不理会父接口/父类 泛型 -> 泛型回归本质 -> Object
class Son implements Fu{

    @Override
    public void show(Object o) {

    }
}

//泛型延用 -> 实现类继续延用父接口的泛型 [普遍场景]
class Zi<T> implements Fu<T>{

    @Override
    public void show(T e) {

    }
}
